#pragma once 
#include<iostream>
#include<assert.h>
#include<string.h>
using namespace std;
namespace hcc
{
    class string
    {
        public:
            string()
                :_str(nullptr)
                ,_size(0)
                ,_capacity(0)
            {}
            string(const char* str)
                :_str(new char[strlen(str)+1])
            {   
                _size=strlen(str);
                _capacity=_size;
                memcpy(_str,str,_capacity+1);
            }
            string(const string& d)
                :_str(nullptr)
            {
                string tem(d._str);
                swap(tem);
            }
            ~string()
            {
                delete[] _str;
                _str=nullptr;
                _size=_capacity=0;
            }
            string& operator=(string d)
            {
                swap(d);
                return *this;
            }
            void swap(string& d)
            {
                std::swap(_str,d._str);
                std::swap(_size,d._size);
                std::swap(_capacity,d._capacity);
            }
            char* c_str() const
            {
                return _str;
            }
        private:
            char* _str;
            size_t _size;
            size_t _capacity;
    };
}
